#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <map>
#include <climits>
#include <cmath>

using namespace std;

class Solution1 {
public:
    int cuttingRope(int n) {
        if(n==2){
            return 1;
        }else if(n==3){
            return 2;
        }
        if(n%3==0){
            return pow(3,n/3);
        }else if(n%3==1){
            return pow(3,n/3-1)*4;
        }else if(n%3==2){
            return pow(3,n/3)*2;
        }
    }
};




class Solution {
    int N=1e9+7;
    int pow_m(int x,int y){
        long long res=1,cnt=x;
        while(y){
            if(y&1) res=((res%N)*(cnt%N))%N;
            cnt=((cnt%N)*(cnt%N))%N;
            y>>=1;
        }
        return res;
    }
public:
    int cuttingRope(int n) {
        if(n==2){
            return 1;
        }else if(n==3){
            return 2;
        }
        if(n%3==0){
            return pow_m(3,n/3)%N;
        }else if(n%3==1){
            long long x=pow_m(3,n/3-1);
            x=(2*x)%N+(2*x)%N;
            return x%N;
        }else if(n%3==2){
            return ((pow_m(3,n/3)%N)*2)%N;
        }
        return -1;
    }
};

int N=1e9+7;
int pow_m(int x,int y){
    long long res=1,cnt=x;
    while(y){
        if(y&1) res=((res%N)*(cnt%N))%N;
        cnt=((cnt%N)*(cnt%N))%N;
        y>>=1;
    }
    return res;
}
int main(){
    Solution s;
    for(int i=2;i<=1000;i++){

    cout << s.cuttingRope(i)<<endl;
    }



    return 0;
}